#include "../../../common/data_redis.hpp"
#include <gflags/gflags.h>
#include <thread>

DEFINE_bool(run_mode, false, "程序的运行模式, false-调试模式, true-发布模式");
DEFINE_string(log_file, "", "发布模式下, 用于指定日志文件的路径");
DEFINE_int32(log_level, 0, "发布模式下, 用于指定日志的输出等级");

DEFINE_string(ip, "127.0.0.1", "这是服务器的监听IP地址, 格式: 127.0.0.1");
DEFINE_int32(port, 6379, "这是服务器的监听端口, 格式: 6379");
DEFINE_int32(db, 0, "库的编号, 默认0号");
DEFINE_bool(keep_alive, true, "是否开启长连接保活, 默认开启");

void session_test(const std::shared_ptr<sw::redis::Redis>& rclient) 
{
    suye::Session ss(rclient);
    ss.append("会话ID1", "用户ID1");
    ss.append("会话ID2", "用户ID2");
    ss.append("会话ID3", "用户ID3");
    ss.append("会话ID4", "用户ID4");

    ss.remove("会话ID2");
    ss.remove("会话ID3");

    auto res1 = ss.uid("会话ID1");
    if (res1) std::cout << *res1 << std::endl;
    auto res2 = ss.uid("会话ID2");
    if (res2) std::cout << *res2 << std::endl;
    auto res3 = ss.uid("会话ID3");
    if (res3) std::cout << *res3 << std::endl;
    auto res4 = ss.uid("会话ID4");
    if (res4) std::cout << *res4 << std::endl;
}

void status_test(const std::shared_ptr<sw::redis::Redis>& rclient) 
{
    suye::Status sta(rclient);
    sta.append("用户ID1");
    sta.append("用户ID2");
    sta.append("用户ID3");
    sta.append("用户ID4");

    sta.remove("用户ID2");
    sta.remove("用户ID3");

    auto res1 = sta.exists("用户ID1");
    std::cout << "用户ID1: " << res1 << std::endl;
    auto res2 = sta.exists("用户ID2");
    std::cout << "用户ID2: " << res2 << std::endl;
    auto res3 = sta.exists("用户ID3");
    std::cout << "用户ID3: " << res3 << std::endl;
    auto res4 = sta.exists("用户ID4");
    std::cout << "用户ID4: " << res4 << std::endl;
}

void code_test(const std::shared_ptr<sw::redis::Redis>& rclient) 
{
    suye::Codes code(rclient);
    code.append("验证码ID1", "111");
    code.append("验证码ID2", "222");
    code.append("验证码ID3", "333");
    code.append("验证码ID4", "444");

    code.remove("验证码ID2");
    code.remove("验证码ID3");

    auto res1 = code.cid("验证码ID1");
    if (res1) std::cout << *res1 << std::endl;
    auto res2 = code.cid("验证码ID2");
    if (res2) std::cout << *res2 << std::endl;
    auto res3 = code.cid("验证码ID3");
    if (res3) std::cout << *res3 << std::endl;
    auto res4 = code.cid("验证码ID4");
    if (res4) std::cout << *res4 << std::endl;

    std::this_thread::sleep_for(std::chrono::seconds(4));
    res1 = code.cid("验证码ID1");
    if (!res1) std::cout << "验证码ID1不存在" << std::endl;
    res2 = code.cid("验证码ID2");
    if (!res2) std::cout << "验证码ID2不存在" << std::endl;
    res3 = code.cid("验证码ID3");
    if (!res3) std::cout << "验证码ID3不存在" << std::endl;
    res4 = code.cid("验证码ID4");
    if (!res4) std::cout << "验证码ID4不存在" << std::endl;
}



int main(int argc, char* argv[])
{
    google::ParseCommandLineFlags(&argc, &argv, true);
    // suye::Init_logger(FLAGS_run_mode, FLAGS_log_file, FLAGS_log_level);

    auto rclient = suye::RedisClientFactory::create(FLAGS_ip, FLAGS_port, FLAGS_db, FLAGS_keep_alive);
    // session_test(rclient);
    // status_test(rclient);
    code_test(rclient);
    
    return 0;
}
